]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
inputMethod: Manually reset input context state before unfocus
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 17 Oct 2022 11:34:21 +0000 (13:34 +0200)
committerMarge Bot <marge-bot@gnome.org>
Wed, 26 Oct 2022 10:00:37 +0000 (10:00 +0000)
The IBusInputContext currently seems to be a bit sloppy wrt propagating
the current state to engines after those are changed, this results in
engines possibly ending with purpose/hint/etc that do not actually
correspond to the current state.

Ensure this state is cleared on unfocus of our IBusInputContext, so
that the next time the input method receives an input focus, the new
state makes it all the way to the currently active engine.

Fixes situations in the GDM/lock screen password entry that IBus
would miss the PASSWORD hint set on the StEntry, and let passwords
be fed to engines.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5966
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>

js/misc/inputMethod.js

index 07c177b81750f912470ab5c916f27e7b36a6d81b..3a007d5e93f0814bf2c22cfbabaf82abe6560f73 100644 (file)
@@ -187,8 +187,10 @@ var InputMethod = GObject.registerClass({
 
     vfunc_focus_out() {
         this._currentFocus = null;
-        if (this._context)
+        if (this._context) {
+            this._fullReset();
             this._context.focus_out();
+        }
 
         if (this._preeditStr && this._preeditVisible) {
             // Unset any preedit text
@@ -353,6 +355,13 @@ var InputMethod = GObject.registerClass({
         }
     }
 
+    _fullReset() {
+        this._context.set_content_type(0, 0);
+        this._context.set_cursor_location(0, 0, 0, 0);
+        this._context.set_capabilities(0);
+        this._context.reset();
+    }
+
     update() {
         if (!this._context)
             return;